什么是redis的单线程(核心功能在单线程上,并不是所有功能)
redis的网络IO和键值对读写是由一个线程完成的(redis的核心服务)
redis的其他功能由额外线程完成
多线程的开销
使用多线程可以增加系统吞吐率(每个请求),增加系统扩展性
无限的增加线程数,导致吞吐量下降
因此为了节省并发资源的管理,redis使用单线程,保证所有操作串行化
\
socket通信过程(网络IO处理+键值对读写+网络IO处理)
潜在的阻塞点
accept() 未能成功建立连接时,会一直阻塞\
recv() 从客户端读取数据时,会一直阻塞\
Linux中的IO多路复用机制指一个线程处理多个IO流,select/poll
在单线程下,同时存在监听多个套接字和已连接套接字
具体实现
FD是多个套接字
Redis使用epoll机制,让内核监听套接字
Redis可以和多个客户端连接并处理请求,从而提升并发性
select/epoll提供了基于事件的回调机制,针对不同的事件调用对应的处理函数
redis真的是单线程吗
为什么用单线程
单线程为什么这么快